import axios from 'axios'
import store from '@/store'
import router from '@/router'
import { Toast } from 'vant'
const instance = 12
instance.interceptors.response.use(async function (error) {
  // 对响应错误做点什么 ==>⭐token过期处理
  console.log(error) // 通过token过期状态码判断
  if (error.response.status === 401) {
    // =======开始无感刷新======
    // ⭐1.去vuex获取refresh_token
    const refreshToken = store.state.user.token.refresh_token
    console.log(refreshToken)
    if (refreshToken) {
      // 本地有refresh_token
      try {
        // ⭐2.发送ajax请求 根据refresh_token 获得新用户token
        const res = await axios({
          url: 'http://toutiao.itheima.net/v1_0/authorizations',
          method: 'PUT',
          headers: {
            Authorization: `Bearer ${refreshToken}`
          }
        })
        console.log('refreshToken', res)
        // ⭐3.将获取到的新token存储到本地和vuex中
        store.commit('user/setToken', {
          // 重新获取的token
          token: res.data.data.token,
          // refresh_token还是之前的
          refresh_token: refreshToken
        })
        // ⭐4.用已经存储的新token 再次发请求获取用户数据
        return instance(error.config)
      } catch (err) {
        // ⭐5.refresh_token也过期了 用户token没有获取到
        goLogin()
      }
    } else {
      // ⭐6.没有refresh_token
      goLogin()
    }
  } else {
    // 非401
    return Promise.reject(error)
  }
})

// 封装去登录页面函数
function goLogin() {
  // 把vuex和本地存储token清除掉
  store.commit('user/removeToken')
  // 提示 vant Toast组件
  Toast.fail('登录过期 重新登录')
  // 跳转
  router.push({
    path: '/login',
    query: {
      flag: true,
      back: router.currentRoute.fullPath
    }
  })
}
